// 维护购物车相关的数据
export default {
  namespaced: true,
  // state: {
  //   // 购物车中的商品数据
  //   cartItems: uni.getStorageSync('cartItems')
  //     ? JSON.parse(uni.getStorageSync('cartItems'))
  //     : [],
  // },
  state() {
    // 有时候 状态的初始值 是需要一定的逻辑计算得来的!!!
    // 一般数据的初始值简单 直接写对象; 数据的初始值比较复杂, 往往换成函数的写法 消化逻辑!!!
    // state返回的对象就是仓库的数据
    const str = uni.getStorageSync('cartItems')
    return {
      cartItems: str ? JSON.parse(str) : [],
    }
  },
  getters: {
    // 商品总数   8
    totalCount(state) {
      return state.cartItems.reduce((sum, item) => sum + item.goods_count, 0)
    },
    // 选中的商品总数   5
    checkedTotal(state) {
      // return state.cartItems
      //   .filter((item) => item.goods_state)
      //   .reduce((sum, item) => sum + item.goods_count, 0)
      return state.cartItems.reduce(
        (sum, item) => (item.goods_state ? sum + item.goods_count : sum),
        0
      )
    },
    // 选中的商品总价
    checkedAmount(state) {
      return state.cartItems
        .reduce((sum, item) => {
          return item.goods_state
            ? sum + item.goods_count * item.goods_price
            : sum
        }, 0)
        .toFixed(2)
    },
  },
  mutations: {
    changeAllState(state, flag) {
      state.cartItems.forEach((item) => {
        item.goods_state = flag
      })

      uni.setStorageSync('cartItems', JSON.stringify(state.cartItems))
    },
    addToCart(state, item) {
      const temp = state.cartItems.find((v) => v.goods_id === item.goods_id)

      if (temp) {
        // 数量++
        temp.goods_count++
      } else {
        state.cartItems.push(item)
      }

      uni.setStorageSync('cartItems', JSON.stringify(state.cartItems))
    },
    updateState(state, id) {
      const temp = state.cartItems.find((item) => item.goods_id === id)

      if (temp) {
        temp.goods_state = !temp.goods_state

        // 数据一旦变化 需要同步到本地
        uni.setStorageSync('cartItems', JSON.stringify(state.cartItems))

        console.log(state.cartItems)
      }
    },
    changeCount(state, { num, id }) {
      const temp = state.cartItems.find((item) => item.goods_id === id)
      if (temp) {
        temp.goods_count = num

        uni.setStorageSync('cartItems', JSON.stringify(state.cartItems))

        console.log(state.cartItems)
      }
    },
    delItem(state, id) {
      state.cartItems = state.cartItems.filter((item) => item.goods_id !== id)

      uni.setStorageSync('cartItems', JSON.stringify(state.cartItems))

      console.log(state.cartItems)
    },
  },
  actions: {},
}
